すべてのプロダクト
Search
ドキュメントセンター

PolarDB:SQL文のテーブルにIMCIが作成されているかどうかを確認する

最終更新日:May 27, 2024

dbms_imci.check_columnar_index() ストアドプロシージャは、入力したSQL文を解析し、SQL文で使用されているすべての列を取得して、これらの列に対してインメモリ列インデックス (IMCI) が有効かどうかを確認できます。

  • IMCIが無効な列がSQL文に含まれている場合、ストアドプロシージャはデータベース名、テーブル名、および列の名前を返します。

  • IMCIがSQL文のすべての列に対して有効な場合、ストアドプロシージャは空の結果セットを返します。

前提条件

  • PolarDBクラスターでは、次のいずれかのバージョンを使用します。

    • リビジョンバージョンが8.0.1.1.30以降のPolarDB for MySQL 8.0.1のクラスター。

    • リビジョンバージョンが8.0.2.2.12以降のPolarDB for MySQL 8.0.2のクラスター。

  • 指定されたテーブルに対する読み取り (SELECT) 権限があること。

構文

dbms_imci.check_columnar_index('<query_string>');

Parameters

パラメーター

説明

query_string

解析されるSQLステートメント。

説明
  • SQL文は有効なSELECT文である必要があります。 INSERTUPDATEDELETEなどの他のDMLステートメントはサポートされていません。 SELECTステートメントにエラーが含まれている場合、エラーメッセージが返されます。 たとえば、存在しない列が含まれます。

  • query_stringの値は文字列である必要があり、変数値またはクエリ結果にすることはできません。

使用上の注意

  • ストアドプロシージャは大文字と小文字が区別されます。

  • ストアドプロシージャを使用してSQL文を解析し、SQL文のテーブル名の前にデータベース名を追加すると、そのデータベース名が使用されます。 SQL文のテーブル名の前にデータベース名が追加されていない場合は、use db_nameステートメントを実行して、SQL文のテーブルを含むデータベースに切り替えてから、ストアドプロシージャを実行する必要があります。

  • SQL文には長さ制限が設定されていませんが、クライアントからデータベースに送信されるSQL文の長さは、SQL文やmax_allowed_packetなどのパラメーターを解析するためのthread_stackパラメーターによって制限されます。

  • IMCIがSQL文の列のデータ型をサポートしていない場合、ストアドプロシージャが呼び出されるとエラーメッセージが返されます。

  • SELECTステートメントは、準備されたステートメントのパラメータ化形式にすることができます。 しかし、準備... FROMキーワードは追加できません。

  • SQL文にエスケープが必要な文字 ('"など) が含まれている場合は、MySQL構文に基づいて文字をエスケープする必要があります。 サンプルコード:

    • SQL文の '''に置き換えます。

      dbms_imci.check_columnar_indexを呼び出します (t1から 'select t1.a from t1.b='some_string''');
    • SQL文の "" "に置き換えます。

      dbms_imci.check_columnar_index("select t1.a from t1 where t1.b = " "some_string" "");

    エスケープルールの詳細については、「MySQLドキュメント」をご参照ください。

t1t2、およびt3テーブルは、以下の例で使用される。 ストアドプロシージャを呼び出して、SQL文のすべての列でIMCIが有効かどうかを確認します。

  1. 次のステートメントを実行して、testデータベースに切り替えます。

    使用テスト;
  2. 次のステートメントを実行して、t1t2、およびt3テーブルを作成します。 IMCIは、t3テーブル内のすべての列に対して有効である。

    create table t1 (a int, b int) engine = innodb;
    作成テーブルt2 (a int, b int) engine = innodb;
    作成テーブルt3 (a int, b int) engine = innodb comment 'columnar=1'; 
  3. ストアドプロシージャを呼び出して、SQL文のすべての列でIMCIが有効かどうかを確認します。

    • SQL文は、t1テーブルとt2テーブルの列を使用します。

      dbms_imci.check_columnar_index (t1.a) from t1 inner join t2 on t1.a = t2.a group by t1.b ') を呼び出します。

      サンプル結果:

      + ----------- --------------------------------------
      | TABLE_SCHEMA | テーブル名 | COLUMN_NAME |
      + ------------ ------------------------------------- +
      | テスト | t1 | a |
      | テスト | t1 | b |
      | テスト | t2 | a |
      + ------------ ------------------------------------- +
      セットの3列 (0.01秒) 

      SQL文はt1.at1.b、およびt2.a列を使用し、IMCIは3つの列に対して無効です。 したがって、ストアドプロシージャは、データベース名、テーブル名、および3つの列の名前を返します。

    • SQL文の列はt3テーブルに属します。

      dbms_imci.check_columnar_indexを呼び出す (t3' から 'select a, b);

      サンプル結果:

      空セット (0.00秒)

      IMCIは、t3テーブル内のすべての列に対して有効である。 したがって、ストアドプロシージャは空の結果セットを返します。