> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# optimize_trivial_* セッション設定

> optimize_trivial_* グループに含まれる ClickHouse のセッション設定。

export const SettingsInfoBlock = ({type, default_value, changeable_without_restart}) => {
  return <div className="not-prose" style={{
    display: "flex",
    flexWrap: "wrap",
    alignItems: "baseline",
    columnGap: "0.5rem",
    rowGap: "0.125rem",
    margin: "0.375rem 0",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <div style={{
    fontWeight: 600,
    opacity: 0.72
  }}>型</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>デフォルト値</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          再起動せずに変更可能
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

export const ExperimentalBadge = () => {
  return <div className="experimentalBadge">
            <div className="experimentalIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.25" d="M5.5 2H10.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M9.50015 2V6.19625L13.4283 12.7425C13.4738 12.8183 13.4985 12.9049 13.4996 12.9934C13.5008 13.0818 13.4785 13.169 13.435 13.246C13.3914 13.323 13.3283 13.3871 13.2519 13.4317C13.1755 13.4764 13.0886 13.4999 13.0002 13.5H3.00015C2.91164 13.5 2.8247 13.4766 2.74822 13.432C2.67174 13.3874 2.60847 13.3233 2.56487 13.2463C2.52126 13.1693 2.49889 13.082 2.50004 12.9935C2.50119 12.905 2.52582 12.8184 2.5714 12.7425L6.50015 6.19625V2" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M4.47656 9.56754C5.30344 9.41254 6.47656 9.47942 7.99969 10.25C10.0153 11.2707 11.4216 11.0569 12.2184 10.7282" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            実験的な機能です。 <u><a href="/docs/docs/beta-and-experimental-features#experimental-features">詳細を見る。</a></u>
        </div>;
};

これらの設定は [system.settings](/docs/ja/reference/system-tables/settings) で参照でき、[ソースコード](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp) から自動生成されています。

<div id="optimize_trivial_approximate_count_query">
  ## optimize\_trivial\_approximate\_count\_query
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

このような概算をサポートするストレージ (たとえば EmbeddedRocksDB) に対する単純な count 最適化では、概算値を使用します。

設定可能な値:

* 0 — 最適化は無効です。
  * 1 — 最適化は有効です。

<div id="optimize_trivial_count_query">
  ## optimize\_trivial\_count\_query
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

MergeTree のメタデータを使用して、単純なクエリ `SELECT count() FROM table` の最適化を有効または無効にします。行レベルのセキュリティを使用する必要がある場合は、この設定を無効にしてください。

設定可能な値:

* 0 — 最適化は無効です。
  * 1 — 最適化は有効です。

関連項目:

* [optimize\_functions\_to\_subcolumns](/docs/ja/reference/settings/session-settings/optimize#optimize_functions_to_subcolumns)

<div id="optimize_trivial_count_with_sparsity_filter">
  ## optimize\_trivial\_count\_with\_sparsity\_filter
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.7"},{"label": "0"},{"label": "`<pred>` によって行がデフォルト値と非デフォルト値に正確に分かれる場合に、`serialization.json` に記録されたカラムごとの `num_defaults` \/ `num_rows` を使って `SELECT count() FROM t WHERE <pred>` を返すための新しい（実験的な）設定。"}]}]} />

[optimize\_trivial\_count\_query](/docs/ja/reference/settings/session-settings/optimize-trivial#optimize_trivial_count_query) の最適化を、
`SELECT count() FROM t WHERE col <op> const` 形式の
クエリにも拡張します。ここで、`<op> const` は `col` のデフォルト値と非デフォルト値に行を
正確に分ける必要があります。その場合、count は MergeTree がすでに
`serialization.json` に保持しているカラム単位の `num_defaults` / `num_rows` カウンターから
返されるため、データスキャンは発生しません。

認識されるパターン:

* `Int*` / `UInt*`、`String` /
  `FixedString`、`Date` / `DateTime` / `DateTime64`、`Decimal*`、`UUID`、`IPv4` / `IPv6` に対する `col = default(col)` / `col != default(col)`。
* `Nullable` カラムに対する `IS NULL` / `IS NOT NULL`。
* `String` カラムに対する `empty(col)` / `notEmpty(col)`。
* `Bool` カラムに対する `col = true` / `col != true`。
* 符号なし整数カラムに対する `col > 0`、`col >= 1`、`col < 1`、`col <= 0`。
* `Int*`、`UInt*`、`Bool` カラムに対する単独の `col` / `NOT col` (真偽判定) 。

等価比較のパターンは、`Float*`、`Enum*`、`Nullable`、`LowCardinality`、
および複合型 (`Tuple`、`Array`、`Map`、...) には適用されません。これらでは、count は
通常のスキャン経路で処理されます。

この最適化を有効にするには、パーツごとの `num_defaults` カウンターが正確である必要があります。insert と
merge の前に、ターゲットテーブルで MergeTree の
テーブル設定 `compute_exact_num_defaults_for_sparse_columns` を有効にしてください。
これを有効にせずに書き込まれたパーツは、暗黙的に rewrite の対象外となるため、
`optimize_trivial_count_with_sparsity_filter` を有効にするだけでは不十分です。

`Nullable` カラムに対する `IS NULL` / `IS NOT NULL` パターンでは、そのカラムに
`serialization.json` 内の `num_defaults` エントリも必要です。これは、MergeTree の
テーブル設定 `nullable_serialization_version` が insert /
merge 時に `allow_sparse` に設定されている場合にのみ作成されます。デフォルト値 `basic` では、`Nullable` カラムにはカラムごとのエントリが作成されないため、
この最適化は暗黙的に適用されません。

設定可能な値:

* 0 — 最適化は無効です。
  * 1 — 最適化は有効です。

関連項目:

* [optimize\_trivial\_count\_query](/docs/ja/reference/settings/session-settings/optimize-trivial#optimize_trivial_count_query)

<div id="optimize_trivial_group_by_limit_query">
  ## optimize\_trivial\_group\_by\_limit\_query
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.5"},{"label": "1"},{"label": "クエリ `SELECT key_expr FROM t GROUP BY key_expr LIMIT n` に対して、集約を最大でも LIMIT 個の異なるキーに制限する新しい設定。"}]}]} />

単純なクエリ `SELECT key_expr FROM table GROUP BY key_expr LIMIT n` に対する最適化を有効または無効にします (projection に aggregate functions がなく、`HAVING`/`ORDER BY`/`LIMIT BY`/window clauses がなく、`GROUP BY` modifiers もない場合) 。この最適化は、`max_rows_to_group_by = n + offset` および `group_by_overflow_mode = 'any'` を設定することで行われます。`n + offset` 個の異なるキーが生成された時点で、集約は停止します。

この最適化は、ユーザーが `group_by_overflow_mode` を `any` 以外の値に明示的に設定している場合 (明示した `throw`/`break` の動作を維持するため) 、およびユーザーがすでにより厳しい `max_rows_to_group_by` を設定している場合 (この最適化が no-op になるため) には抑制されます。

設定可能な値:

* 0 — 最適化は無効です。
* 1 — 最適化は有効です。

<div id="optimize_trivial_insert_select">
  ## optimize\_trivial\_insert\_select
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.7"},{"label": "0"},{"label": "この最適化は、多くの場合意味がありません。"}]}]} />

単純な 'INSERT INTO table SELECT ... FROM TABLES' クエリを最適化
