このトピックでは、AnalyticDB for MySQL でサポートされているデータ型、MySQL データ型との違い、および暗黙的な型変換ルールについて説明します。
AnalyticDB for MySQL でサポートされている基本的なデータ型
カテゴリ | データ型 | 説明 | MySQL データ型との比較 |
数値 |
| 有効値:
| 違いはありません。 |
| 有効値: | 違いはありません。 | |
| 有効値: | 違いはありません。 | |
| 有効値: | AnalyticDB for MySQL の | |
| 有効値: | 違いはありません。 | |
| 有効値: | 違いはありません。 | |
| 有効値: | 違いはありません。 | |
|
|
最大精度を調整するには、テクニカルサポートにお問い合わせください。 | |
文字列 |
| VARCHAR 値のサイズは最大 16 MB です。VARCHAR を使用する場合、長さを指定する必要はありません。 説明 長さを指定した場合 (VARCHAR(255) など)、括弧内の数値は構文の互換性のためにのみ使用されます。実際の長さはデータサイズによって異なり (最大 16 MB)、255 文字を超える場合があります。指定された長さを使用して長さの検証を実行しないでください。 | AnalyticDB for MySQL の |
| ストレージ文字の長さ。 | AnalyticDB for MySQL の | |
時間 |
| 有効値: |
|
| 有効値: |
| |
| 有効値: 重要 デフォルトでは、 |
| |
| 有効値: 説明 デフォルトでは、 |
| |
空間 |
| 地理座標 x および y。 | 違いはありません。 |
暗黙の型変換
暗黙の型変換とは、SQL クエリ操作を 実行する 際に、コンテキストと型変換ルールに基づいて AnalyticDB for MySQL によって実行される自動型変換のことです。
射影変換ルール
SELECT 文の列が定数と比較される場合、戻り値の型は次の表に示すデータ型に暗黙的に変換されます。暗黙的な型変換がサポートされていない場合は、エラーが発生します。
列/定数 | VARCHAR | BOOLEAN | TINYINT | SMALLINT | INTEGER | BIGINT | DECIMAL | DOUBLE | TIME | DATE | TIMESTAMP | DATETIME |
VARCHAR | VARCHAR | BOOLEAN | BIGINT | BIGINT | BIGINT | BIGINT | DECIMAL | DOUBLE | TIME | DATE | TIMESTAMP | DATETIME |
BOOLEAN | BOOLEAN | BOOLEAN | TINYINT | SMALLINT | INTEGER | BIGINT | サポートされていません | DOUBLE | サポートされていません | サポートされていません | サポートされていません | サポートされていません |
TINYINT | BIGINT | TINYINT | TINYINT | SMALLINT | INTEGER | BIGINT | DECIMAL | DOUBLE | サポートされていません | サポートされていません | サポートされていません | サポートされていません |
SMALLINT | BIGINT | SMALLINT | SMALLINT | SMALLINT | INTEGER | BIGINT | DECIMAL | DOUBLE | サポートされていません | サポートされていません | サポートされていません | サポートされていません |
INTEGER | BIGINT | INTEGER | INTEGER | INTEGER | INTEGER | BIGINT | DECIMAL | DOUBLE | BIGINT | BIGINT | BIGINT | BIGINT |
BIGINT | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT | DECIMAL | DOUBLE | BIGINT | BIGINT | BIGINT | BIGINT |
DECIMAL | DECIMAL | サポートされていません | DECIMAL | DECIMAL | DECIMAL | DECIMAL | DECIMAL | DOUBLE | サポートされていません | サポートされていません | サポートされていません | サポートされていません |
DOUBLE | DOUBLE | DOUBLE | DOUBLE | DOUBLE | DOUBLE | DOUBLE | DOUBLE | DOUBLE | DOUBLE | DOUBLE | DOUBLE | DOUBLE |
TIME | TIME | サポートされていません | サポートされていません | サポートされていません | BIGINT | BIGINT | サポートされていません | DOUBLE | TIME | BIGINT | BIGINT | DATETIME |
DATE | DATE | サポートされていません | サポートされていません | サポートされていません | BIGINT | BIGINT | サポートされていません | DOUBLE | BIGINT | TIMESTAMP | TIMESTAMP | DATETIME |
TIMESTAMP | TIMESTAMP | サポートされていません | サポートされていません | サポートされていません | BIGINT | BIGINT | サポートされていません | DOUBLE | BIGINT | TIMESTAMP | TIMESTAMP | DATETIME |
DATETIME | DATETIME | サポートされていません | サポートされていません | サポートされていません | BIGINT | BIGINT | サポートされていません | DOUBLE | DATETIME | DATETIME | DATETIME | DATETIME |
フィルタ変換ルール
WHERE 句の列が定数と比較されると、戻り値の型は次の表に示すデータの型に暗黙的に変換されます。 暗黙の型変換がサポートされていない場合、エラーが発生します。
データ型が異なる場合、暗黙の型変換によってプッシュダウンが失敗し、全表スキャンがトリガーされる可能性があり、クエリのパフォーマンスが大幅に低下します。プッシュダウンとは、インデックスベースのフィルタリングのために、フィルター条件をストレージ レイヤーにプッシュすることです。これにより、フィルターの度合いが高い場合にデータ スキャンの負荷が軽減され、クエリのパフォーマンスが向上します。
次の表では、戻りデータ型の前の 1 はプッシュダウンの成功を示し、0 はプッシュダウンの失敗を示します。
列/定数 | VARCHAR | ブール値 | TINYINT | SMALLINT | 整数 | BIGINT | DECIMAL 型 | 実数 | ダブル | 時間 | 日付 | タイムスタンプ | 日時 |
VARCHAR | 1 VARCHAR | 0 BOOLEAN | 0 BIGINT | 0 BIGINT | 0 BIGINT | 0 BIGINT | 0 DECIMAL | 0 REAL | 0 DOUBLE | 0 TIME | 0 DATE | 0 TIMESTAMP | 0 DATETIME |
ブール値 | 1 ブール値 | 1 BOOLEAN | 0 TINYINT | 0 SMALLINT | 0 INTEGER | 0 BIGINT | サポートされていません | 0 REAL | 0 DOUBLE | サポートされていません | サポートされていません | サポートされていません | サポートされていません |
TINYINT | 1 TINYINT | 1 TINYINT | 1 TINYINT | 1 TINYINT | 1 TINYINT | 1 TINYINT | 0 DECIMAL | 0 REAL | 0 DOUBLE | サポートされていません | サポートされていません | サポートされていません | サポートされていません |
SMALLINT | 1 SMALLINT | 1 SMALLINT | 1 SMALLINT | 1 SMALLINT | 1 SMALLINT | 1 SMALLINT | 0 DECIMAL | 0 REAL | 0 DOUBLE | サポートされていません | サポートされていません | サポートされていません | サポートされていません |
整数 | 1 整数 | 1 整数 | 1 整数 | 1 整数 | 1 整数 | 1 整数 | 0 固定小数点数 | 0 実数 | 0 倍精度浮動小数点数 | 1 整数 | 1 整数 | 整数 | 整数 |
BIGINT | 1 BIGINT | 1 BIGINT | 1 BIGINT | 1 BIGINT | 1 BIGINT | 1 BIGINT | 0 DECIMAL | 0 REAL | 0 DOUBLE | 1 BIGINT | 1 BIGINT | BIGINT | BIGINT |
DECIMAL | 1 DECIMAL | 1 DECIMAL | 1 DECIMAL | 1 DECIMAL | 1 DECIMAL | 1 DECIMAL | 1 DECIMAL | 0 REAL | 0 DOUBLE | サポートされていません | サポートされていません | サポートされていません | サポートされていません |
REAL | 1 REAL | 1 REAL | 1 REAL | 1 REAL | 1 REAL | 1 REAL | 1 REAL | 1 REAL | 0 DOUBLE | サポートされていません | サポートされていません | サポートされていません | サポートされていません |
DOUBLE | 1 DOUBLE | 1 DOUBLE | 1 DOUBLE | 1 DOUBLE | 1 DOUBLE | 1 DOUBLE | 1 DOUBLE | 1 DOUBLE | 1 DOUBLE | 1 DOUBLE | 1 DOUBLE | 1 DOUBLE | 1 DOUBLE |
時間 | 1 TIME | サポートされていません | サポートされていません | サポートされていません | 0 BIGINT | 0 BIGINT | サポートされていません | サポートされていません | 0 DOUBLE | 1 TIME | 0 BIGINT | 0 BIGINT | 0 DATETIME |
日付 | 1 日付 | サポートされていません | サポートされていません | サポートされていません | 0 BIGINT | 0 BIGINT | サポートされていません | サポートされていません | 0 DOUBLE | 0 BIGINT | 1 日付 | 0 タイムスタンプ | 0 DATETIME |
タイムスタンプ | 1 タイムスタンプ | サポートされていません | サポートされていません | サポートされていません | 0 BIGINT | 0 BIGINT | サポートされていません | サポートされていません | 0 DOUBLE | 1 タイムスタンプ | 1 タイムスタンプ | 1 TIMESTAMP | 1 タイムスタンプ |
日時 | 1 DATETIME | サポートされていません | サポートされていません | サポートされていません | 0 BIGINT | 0 BIGINT | サポートされていません | サポートされていません | 0 DOUBLE | 1 DATETIME | 1 DATETIME | 1 DATETIME | 1 DATETIME |
強制型変換の最適化 (ENFORCE_UNWRAP_CAST)
強制型変換最適化は、データベースシステムで型変換を制御するために使用されます。これは、暗黙的な型変換によって引き起こされるクエリのパフォーマンス低下と結果の精度の問題に対処します。
構成方法
強制型変換の最適化は、2 つの構成メソッドをサポートしています。ビジネス要件に基づいていずれかを選択できます。
グローバル構成
グローバルパラメーターを設定することで最適化を有効にします。これはすべてのクエリに適用されます。
SET ADB_CONFIG ENFORCE_UNWRAP_CAST = true; /* グローバルパラメーターを設定して最適化を有効にする */ヒント構成
他のクエリに影響を与えることなく、特定のクエリに対して一時的に最適化を有効にします。
/*+ ENFORCE_UNWRAP_CAST=true */ /* 特定のクエリに対して最適化を一時的に有効にする */
例
col 列は、test テーブルの VARCHAR 型で、'1'、'1a'、'abc' の値が含まれています。次の文を実行します。
SELECT col FROM test WHERE col = 1;結果は、enforce_unwrap_cast パラメーターの構成ステータスによって異なります。
デフォルトの無効ステータス (
ENFORCE_UNWRAP_CAST=false): システムは、比較のために VARCHAR 列を BIGINT 型に暗黙的に変換します。この場合、'1'と'1a'は切り捨てられ、数値以外の部分は比較のために数値 1 に変換されます。2 つのマッチング結果'1'と'1a'が返されます。列値に対して暗黙の型変換が実行されるため、プッシュダウン最適化がトリガーされず、システムはテーブル全体をスキャンする必要があります。この場合、クエリのパフォーマンスが低下します。有効ステータス (
ENFORCE_UNWRAP_CAST=true): システムは、文字列比較のために INTEGER 定数を VARCHAR 型に変換します。この場合、'1'のみが定数1と一致し、'1a'は文字列の不一致により除外されます。一致する結果は'1'の 1 つだけ返されます。この最適化ポリシーは、比較ロジックをストレージ レイヤーにプッシュダウンできるため、スキャンされるデータ量が効果的に削減され、クエリのパフォーマンスが向上します。