コストモデル

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

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

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

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

注記:

コスト モデルのバージョンを切り替えると、クエリ プランが変更される可能性があります。

このページは役に立ちましたか?