> For the complete documentation index, see [llms.txt](https://mariadb.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mariadb.com/docs/server/ha-and-performance/optimization-and-tuning/query-optimizer.md).

# Query Optimizer

{% columns %}
{% column %}
{% content-ref url="/pages/TIK5J1y3C1YWNZaQKTEE" %}
[Block-Based Join Algorithms](/docs/server/ha-and-performance/optimization-and-tuning/query-optimizer/block-based-join-algorithms.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
Block-based join algorithms in MariaDB: Block Nested Loop, Block Hash Join, and Batch Key Access.
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/geaEatxcaqsyWooWO2GL" %}
[Condition Selectivity Computation Internals](/docs/server/ha-and-performance/optimization-and-tuning/query-optimizer/condition-selectivity-computation-internals.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
How the optimizer computes condition selectivities (internals).
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/6SFeVx8mRu89vnFIXrRY" %}
[Extended Keys](/docs/server/ha-and-performance/optimization-and-tuning/query-optimizer/extended-keys.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
The Extended Keys optimization, which uses primary-key parts appended to secondary indexes.
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/ouuc2VqtihtWNZVsbu9q" %}
[MIN/MAX optimization](/docs/server/ha-and-performance/optimization-and-tuning/query-optimizer/minmax-optimization.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
The MIN/MAX optimization, which resolves MIN() and MAX() from an index without scanning rows.
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/PP0Zxff8QXjYJVq0ZHhO" %}
[Notes When an Index Cannot Be Used](/docs/server/ha-and-performance/optimization-and-tuning/query-optimizer/notes-when-an-index-cannot-be-used.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
Situations in which the optimizer cannot use an index.
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/A6C8dcjTZd9PBqpoPwe8" %}
[Optimizer Debugging With GDB](/docs/server/ha-and-performance/optimization-and-tuning/query-optimizer/optimizer-debugging-with-gdb.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
Tips for debugging MariaDB optimizer code with GDB.
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/7O3Qsf7LxOU8edPDCqPM" %}
[Optimizer Development](/docs/server/ha-and-performance/optimization-and-tuning/query-optimizer/optimizer-development.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
Notes on MariaDB optimizer development.
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/7mX9WYCiQQu5cnFZ4lQ5" %}
[optimizer\_max\_sel\_arg\_weight](/docs/server/ha-and-performance/optimization-and-tuning/query-optimizer/optimizer_max_sel_arg_weight.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
The optimizer\_max\_sel\_arg\_weight setting, which caps the complexity of range analysis.
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/UboPkN6PQUJHiqjisHmK" %}
[Range Optimizer](/docs/server/ha-and-performance/optimization-and-tuning/query-optimizer/range-optimizer.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
The range optimizer, which builds range scans from WHERE conditions.
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/Hjx09M7O4T71hVokVvkS" %}
[The Optimizer Cost Model from MariaDB 11.0](/docs/server/ha-and-performance/optimization-and-tuning/query-optimizer/the-optimizer-cost-model-from-mariadb-11-0.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
The optimizer cost model introduced in MariaDB 11.0.
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/ExyopWTkQEES3wR6XQmR" %}
[Optimizer Trace](/docs/server/ha-and-performance/optimization-and-tuning/query-optimizer/optimizer-trace.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
Optimizer trace, which records how the optimizer builds a query's execution plan.
{% endcolumn %}
{% endcolumns %}
