tencent cloud

TDSQL-C for MySQL

基本設定

Baixar
Modo Foco
Tamanho da Fonte
Última atualização: 2026-09-01 14:34:02
Traduzido por IA
本稿では、列ストレージインデックスCSIの関連操作についてご紹介します。
説明:
本番システムにとって、列ストレージの有効化と作成は本番変更に相当するため、本番変更プロセスに従う必要があります。変更リスクを低減するために、TDSQL-C for MySQLはいくつかの検証機能(トラフィック再生)を提供しています。トラフィック再生を通じて列ストレージの使用効果を評価し、その後、本番システムで列ストレージインデックスを有効化および作成するかどうかを決定できます。

前提条件

カーネルバージョンはTDSQL-C for MySQL 8.0 3.1.20.001以降です。
説明:
読み取り専用インスタンスの場合、バージョン要件を満たす条件下で、4コア以上の読み取り専用インスタンスのみ列ストレージインデックス機能を有効化できます。

CSIを有効化するまたは無効化する

1. クラスタリストページで、実際に使用しているビューモードに応じてインスタンス詳細ページに入ります。
タブビュー
リストビュー
1. ログインし TDSQL-C for MySQLコンソール、左側のクラスタリストで、対象クラスタをクリックし、クラスタ管理ページに入ります。
2. クラスタの詳細でターゲットインスタンスを確認し、インスタンスIDの後の詳細をクリックすると、インスタンス詳細ページに移動します。
1. TDSQL-C for MySQLコンソールにログインし、クラスタリストで文字セットを変更する必要があるクラスタを見つけ、クラスタIDをクリックしてクラスタ管理ページに入ります。
2. クラスタ管理ページで、インスタンスリストタブを選択し、列ストレージインデックスを有効化または無効化する読み取り専用インスタンスを見つけ、インスタンスIDをクリックしてインスタンス詳細ページに入ります。
2. インスタンス詳細ページのインスタンス形態の横にある編集アイコンをクリックします。

3. ポップアップで操作時間を選択し、「操作中、秒レベルの瞬断が発生する可能性があります。業務に再接続メカニズムが備わっていることを確認してください」にチェックを入れ、確定をクリックします。
操作時間
即時実行:インスタンス形態の切り替えを即時実行します。
メンテナンス時間内:お客様が設定したインスタンスメンテナンス時間内に実行されます。メンテナンス時間の変更については、インスタンスメンテナンス時間の変更を参照してください。
説明:
インスタンス形態が行ストレージから行と列のハイブリッドストレージに調整され、列ストレージインデックスCSIの有効化を意味します。
インスタンス形態が行と列のハイブリッドストレージから行ストレージに調整され、列ストレージインデックスCSIの無効化を意味します。

列ストレージ設定

クエリが列ストレージインデックス機能をより良く活用できるように、パラメータ設定とモニタリング項目を参照して列ストレージを設定できます。

CSIの作成と削除

CREATE TABLE t (c1 INT, c2 INT, c3 INT);
INSERT INTO t VALUES (1, 2, 3);
説明:
DDLはRWで実行する必要があります。
列ストレージインデックスの作成には2つの方法があります:
列ストレージコメント構文を使用します。
COLUMNSTOREキーワードを使用します。
列ストレージコメント構文の使用を推奨します。理由は以下の通りです:
COLUMNSTOREは追加されたキーワードであり、既存のツールチェーンとエコシステムには互換性の問題が存在する可能性があります。
列ストレージコメントはデフォルトで全フィールドの列ストレージインデックスを作成します。フィールドに変更が発生した場合は自動的に同期され、メンテナンスコストが低くなります。
COLUMNSTOREキーワードを使用して列ストレージインデックスを作成する場合は、フィールドリストを手動でメンテナンスする必要があります。フィールド変更時にはインデックス定義を同期して調整する必要があります。

列ストレージコメント構文(推奨)

テーブル作成時に列ストレージインデックスを含めます:
-- 列ストレージコメント(推奨、全インデックス)
CREATE TABLE t (c1 INT, c2 INT, c3 INT) COMMENT='COLUMNAR=1';
個別のステートメントを使用して列ストレージインデックスを作成します:
-- 列ストレージコメント(推奨、全インデックス)
ALTER TABLE t COMMENT 'COLUMNAR=1';
SHOW CREATE TABLE table_name FULLを使用して、テーブルに列ストレージがあるかどうかを確認できます。列ストレージインデックスは新しいキーワードCOLUMNSTOREを使用しています。デフォルトではツール互換性への影響を避けるため出力されません。FULLを使用して出力を制御できます。
列ストレージコメントを使用して作成された列ストレージインデックス:
-- SHOW CREATE TABLE t FULL
CREATE TABLE `t` (
`c1` int DEFAULT NULL,
`c2` int DEFAULT NULL,
`c3` int DEFAULT NULL,
COLUMNSTORE KEY `_default_csi_` (`c1`,`c2`,`c3`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='COLUMNAR=1'
インデックスを削除します:
-- 列ストレージコメント(推奨)
ALTER TABLE t COMMENT 'COLUMNAR=0';

列ストレージキーワード構文

注意:
ツールエコシステムは列ストレージキーワードCOLUMNSTOREと必ずしも互換性があるとは限りません。また、列ストレージインデックスのフィールドは固定されており、新しく追加されたフィールドは自動的に同期されません。そのため、使用は推奨されません。
テーブル作成時に列ストレージインデックスを含めます:
-- 列ストレージキーワード(固定フィールドインデックス csi (c1,c2,c3))
CREATE TABLE t (c1 INT, c2 INT, c3 INT, COLUMNSTORE INDEX csi);
個別のステートメントを使用して列ストレージインデックスを作成します:
-- 列ストレージキーワード(固定フィールドインデックス csi (c1,c2,c3))
ALTER TABLE t ADD COLUMNSTORE INDEX csi;
インデックスを削除します:
-- 列ストレージキーワードで作成されたインデックス名
ALTER TABLE t DROP KEY `csi`;

SQLの実行

EXPLAINはデータテーブルアクセス時にCsi Scanを出力します。データベースプロキシを介して接続でき、閾値と互換性チェックを満たすSQLは自動的に列ストレージノードで実行されます。列ストレージROに直接接続してSQLを実行することもできます。
-- 小データ量テスト設定です。本番システムでは必ず意味のある値を使用してください。
-- SET columnstore_cost_threshold = 0;
-- explain analyze ...
-- explain format=tree ...
select max(col1) from t1 where col2 < col3;
以下は実行計画の出力結果です:
| physical_plan -> Ungrouped Aggregate: max(#0)
-> Projection: col1 (rows=1)
-> Projection: #11 (rows=1)
-> Projection: NULL #6 NULL #5 NULL #4 NULL #3 NULL #2 NULL #1 NULL #0 NULL (rows=1)
-> Projection: NULL #2 NULL #1 NULL #0 NULL (rows=1)
-> Csi Scan Table: test.t1 Projections: col2 col3 col1 (rows=1)

CSIの名称変更

列ストレージインデックスCSIを有効化した後、列ストレージインデックスCSIの名称変更コマンドは次の通りです:
ALTER TABLE table_name RENAME index old_index_name to new_index_name;

列ストレージインデックスCSIヒントステートメント

1. 行ストレージ実行/列ストレージ実行を強制実行する。
行ストレージ実行を強制実行する
SELECT a FROM t IGNORE INDEX (csi);
列ストレージ実行を強制実行する
SELECT a FROM t FORCE INDEX (csi);
2. HINTを使用してパラレルクエリと列ストレージインデックスを同時に実行します。
SELECT /*+PARALLEL(2)*/ a FROM t FORCE INDEX (csi);

テーブルと列ストレージインデックスの作成サンプル

CREATE TABLE t (a int, columnstore index csi (a));
INSERT INTO t VALUES (0), (1), (2);
SHOW CREATE TABLE t;
SHOW INDEX FROM t;
実行結果は次の通り:
MySQL [test]> CREATE TABLE t (a int, columnstore index csi (a));
Query OK, 0 rows affected (0.01 sec)
MySQL [test]> INSERT INTO t VALUES (0), (1), (2);
Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0
MySQL [test]> SHOW CREATE TABLE t;
+-------+---------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+---------------------------------------------------------------------------------------------------------------+
| t | CREATE TABLE `t` ( `a` int DEFAULT NULL, COLUMNSTORE KEY `csi` (`a`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+---------------------------------------------------------------------------------------------------------------+
MySQL [test]> SHOW INDEX FROM t;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+-------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+-------------+---------+---------------+---------+------------+
| t | 1 | csi | 1 | a | NULL | 1 | NULL | NULL | YES | COLUMNSTORE | | | YES | NULL |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+-------------+---------+---------------+---------+------------+
1 row in set (0.00 sec)

INDEX HINTの使用

1. ステートメントに対して列ストレージインデックスの使用を強制します。
SELECT a FROM t FORCE INDEX (csi);
EXPLAIN FORMAT=TREE SELECT a FROM t FORCE INDEX (csi);
実行結果:
MySQL [test]> SELECT a FROM t FORCE INDEX (csi);
+------+
| a |
+------+
| 0 |
| 1 |
| 2 |
+------+
3 rows in set (0.00 sec)
MySQL [test]> EXPLAIN FORMAT=TREE SELECT a FROM t FORCE INDEX (csi);
+---------------------------------------------------------------+
| EXPLAIN |
+---------------------------------------------------------------+
| -> COLUMNSTORE Index scan on t using csi (cost=1.30 rows=3) |
+---------------------------------------------------------------+
1 row in set (0.00 sec)
2. ステートメントに対して列ストレージインデックスを使用しないよう強制します(行ストレージ実行)。
SELECT a FROM t IGNORE INDEX (csi);
EXPLAIN FORMAT=TREE SELECT a FROM t IGNORE INDEX (csi);
実行結果:
MySQL [test]> SELECT a FROM t IGNORE INDEX (csi);
+------+
| a |
+------+
| 0 |
| 1 |
| 2 |
+------+
3 rows in set (0.00 sec)
MySQL [test]> EXPLAIN FORMAT=TREE SELECT a FROM t IGNORE INDEX (csi);
+-----------------------------------------+
| EXPLAIN |
+-----------------------------------------+
| -> Table scan on t (cost=0.55 rows=3) |
+-----------------------------------------+
1 row in set (0.00 sec)

CSIインデックスの作成状況を確認します。

show create table TABLE
説明:
デフォルトではCOLUMNSTOREプレフィックスは表示されません。パラメータcolumnstore_display_in_show_create=1を設定した場合のみ表示されます。
show index from TABLE
explain format=tree
説明:
列CSIを有効にした後、CSIインデックスの作成状況を確認するには、explain format=treeを使用して実行計画のオペレータにCOLUMNSTOREプレフィックスがあるかどうかを確認することもできます(存在する場合、オペレータが列指向実行を採用していることを示します)。これにより、当該オペレータが列指向実行を使用しているかどうかを判断できます。format=treeを指定した場合のみCOLUMNSTOREプレフィックスが表示され、フォーマットを指定しない場合はデフォルトでCOLUMNSTOREは表示されません。

Ajuda e Suporte

Esta página foi útil?

comentários