> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-vortex-format.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# use_* MergeTree table settings

> ClickHouse MergeTree table settings in the use_* generated group.

export const VersionHistory = ({rows = []}) => {
  if (rows.length === 0) {
    return null;
  }
  const headers = ["Version", "Default value", "Comment"];
  const border = "1px solid rgba(128, 128, 128, 0.3)";
  const cell = {
    border,
    padding: "0.25rem 0.5rem",
    textAlign: "start",
    verticalAlign: "top"
  };
  return <details className="not-prose" style={{
    border,
    borderRadius: "0.5rem",
    margin: "0.5rem 0",
    padding: "0.5rem 0.75rem",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <summary style={{
    cursor: "pointer",
    fontWeight: 600,
    opacity: 0.72
  }}>
        Version history
      </summary>
      <table style={{
    borderCollapse: "collapse",
    width: "100%",
    margin: "0.5rem 0 0"
  }}>
        <thead>
          <tr>
            {headers.map(header => <th key={header} style={{
    ...cell,
    fontWeight: 600,
    opacity: 0.72
  }}>
                {header}
              </th>)}
          </tr>
        </thead>
        <tbody>
          {rows.map((row, row_index) => <tr key={row.id ?? row_index}>
              {(row.items ?? []).map((item, item_index) => <td key={item_index} style={{
    ...cell,
    overflowWrap: "anywhere"
  }}>
                  {item?.label}
                </td>)}
            </tr>)}
        </tbody>
      </table>
    </details>;
};

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
  }}>Type</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>Default</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          Changeable without restart
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

These settings are available in [system.merge\_tree\_settings](/reference/system-tables/merge_tree_settings) and are autogenerated from ClickHouse source.

<h2 id="use_adaptive_write_buffer_for_dynamic_subcolumns">
  use\_adaptive\_write\_buffer\_for\_dynamic\_subcolumns
</h2>

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

Allow to use adaptive writer buffers during writing dynamic subcolumns to
reduce memory usage

<h2 id="use_async_block_ids_cache">
  use\_async\_block\_ids\_cache
</h2>

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

Obsolete setting, does nothing.

<h2 id="use_compact_variant_discriminators_serialization">
  use\_compact\_variant\_discriminators\_serialization
</h2>

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

Enables compact mode for binary serialization of discriminators in Variant
data type.
This mode allows to use significantly less memory for storing discriminators
in parts when there is mostly one variant or a lot of NULL values.

<h2 id="use_const_adaptive_granularity">
  use\_const\_adaptive\_granularity
</h2>

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

Non-const adaptive granularity (the default, `index_granularity_bytes` is not `0`) keeps
granules at a constant size in bytes, so their row count varies: for every
written block, rows per granule is `index_granularity_bytes` divided by the
average size of a row in that block, capped at `index_granularity`. Because it differs
from granule to granule, the row count of every granule in the part has to be kept in
memory, 8 bytes each, which on large tables adds up to tens of gigabytes.

Enabling constant adaptive granularity (this setting) keeps granules at a constant number of rows instead,
so their size in bytes varies. The number is computed once from the average size of a
row in the part being written, and a part stores that single value
instead of one value per granule. Because all granules contain the same number of rows,
no additional row count per granule needs to be stored.

The amount of memory currently spent on these values is reported by the
`TotalIndexGranularityBytesInMemory` metric in `system.asynchronous_metrics`,
and per part in `system.parts.index_granularity_bytes_in_memory`.

The setting is applied only to parts written after it was changed. Use
[ALTER TABLE ... REWRITE PARTS](/reference/statements/alter/partition#rewrite-parts)
to apply it to existing parts. `Compact` parts always use adaptive granularity.

<h2 id="use_metadata_cache">
  use\_metadata\_cache
</h2>

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

Obsolete setting, does nothing.

<h2 id="use_primary_key_cache">
  use\_primary\_key\_cache
</h2>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.12"},{"label": "0"},{"label": "New setting"}]}]} />

Use cache for primary index
instead of saving all indexes in memory. Can be useful for very large tables
