重要

TiDB v6.2 (DMR) のドキュメントを表示しています。PingCap は v6.2 のバグ修正を提供していません。バグは将来のリリースで修正される予定です。

一般的な目的では、TiDBデータベースの最新の安定バージョンを使用してください。
重要
このページは英語版のページを機械翻訳しています。原文はこちらからご覧ください。

コストモデル

TiDB はコスト モデルを使用して、 物理的最適化の間にインデックスと演算子を選択します。このプロセスを次の図に示します。

CostModel

TiDB は、プラン (HashJoin や IndexJoin など) 内の各インデックスのアクセス コストと各物理演算子の実行コストを計算し、最小コストのプランを選択します。

以下は、コスト モデルがどのように機能するかを説明する簡単な例です。テーブルtがあるとします。

mysql> SHOW CREATE TABLE t;
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                        |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t     | CREATE TABLE `t` (
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL,
  `c` int(11) DEFAULT NULL,
  KEY `b` (`b`),
  KEY `c` (`c`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

SELECT * FROM t WHERE b < 100 and c < 100ステートメントを実行するとき、TiDB が 20 行がb < 100条件を満たし、500 行がc < 100を満たすと推定し、 INTの型インデックスの長さが 8 であると仮定します。次に、TiDB は 2 つのインデックスのコストを計算します。

  • インデックスbのコスト = b < 100の行数 インデックスbの長さ = 20 8 = 160
  • インデックスcのコスト = c < 100の行数 インデックスcの長さ = 500 8 = 4000

インデックスbのコストが低いため、TiDB はインデックスとしてbを選択します。

前の例は簡略化されており、基本原則を説明するためにのみ使用されています。実際の SQL 実行では、TiDB のコスト モデルはより複雑です。

コスト モデル バージョン 2

警告
  • コスト モデル バージョン 2 は現在、実験的機能です。実稼働環境で使用することはお勧めしません。
  • コスト モデルのバージョンを切り替えると、クエリ プランが変更される場合があります。

TiDB v6.2.0 では、新しいコスト モデルであるコスト モデル バージョン 2 が導入されています。

コスト モデル バージョン 2 では、コスト式のより正確な回帰キャリブレーションが提供され、一部のコスト式が調整され、コスト式の以前のバージョンよりも正確になりました。

コスト モデルのバージョンを切り替えるには、 tidb_cost_model_versionの変数を設定できます。