この記事では、OceanBaseデータベースのMySQLモードとネイティブMySQLデータベースの互換性比較情報について説明します。
OceanBaseデータベースのMySQLモードは、MySQL 5.7および8.0のほとんどの機能と互換性があります。ただし、両者は基盤となるアーキテクチャが異なるため、一部の機能ではOceanBaseが一時的に互換性を持たない、あるいはMySQLと動作が異なる場合があります。この記事では、次のポイントからOceanBaseデータベースとMySQLデータベースの互換性を比較します。
データ型
SQL構文
PL (procedural language)
ビュー (view)
文字セット (character set)
言語ソートと照合順序 (collations)
関数と式
パーティションニング
バックアップ・リカバリ
ストレージエンジン
オプティマイザー
データ型
OceanBaseデータベースがサポートするデータ型は次の通りです:
データ型
整数型:
BOOL/BOOLEAN/TINYINT、SMALLINT、MEDIUMINT、INT/INTEGERおよびBIGINT。固定小数点型:
DECIMALとNUMERIC。浮動小数点型:
FLOATとDOUBLE。Bit-Value型:
BIT。
日付型・時間型:
DATETIME、TIMESTAMP、DATE、TIMEおよびYEAR。文字列型:
CHAR、VARCHAR、BINARYおよびVARBINARY。BLOB型:
TINYBLOB、BLOB、MEDIUMBLOBおよびLONGBLOB。テキスト型:
TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXTおよびSTRING。説明
OceanBaseデータベースでは、V4.3.5 BP1からテキストデータ型
STRINGがサポートされています。列挙(ENUM)型:
ENUMセット(SET)型:
SETJSONデータ型
空間データ型
高効率圧縮ビットマップデータ型
配列(array)データ型
ベクトルデータ型
SQL構文
SELECT
ほとんどのSELECT文をサポートしています。単一または複数のテーブル検索、サブクエリ、内部結合(INNER JOIN)、セミ結合(SEMI JOIN)、外部結合(OUTER JOIN)、グループ化、集計、一般的な確率関数や線形回帰などのデータマイニング関数をサポートしています。
UNION、UNION ALL、MINUS、EXCEPT、INTERSECTなどの集合演算子をサポートします。EXPLAIN文を使用して、実行計画を確認することができます。
INSERT
テーブルに1行または複数行のデータを追加することができ、指定されたパーティションへのデータ追加もサポートしています。
INSERT INTO ... SELECT ...文
UPDATE
単一および複数列のデータ更新
サブクエリによるデータ更新
コレクションのデータ更新
DELETE
- 単一および複数テーブルのデータの削除
TRUNCATE
指定されたテーブルのデータの全削除
SELECT
SELECT ... FOR SHARE ...構文はサポートされていません。
TRUNCATE
- トランザクション中、またはテーブルがロックされている間は実行できません。
PL
OceanBaseデータベースは、MySQLデータベースのほとんどのPL機能と互換性があります。サポートされている主な機能は以下のとおりです。
- データ型
- ストアドプロシージャ
- ユーザー定義関数
- トリガー
- 例外処理
さらに、OceanBaseデータベース独自のMySQL PLシステムパッケージとして、DBMS_RESOURCE_MANAGER、DBMS_STATS、DBMS_UDR、DBMS_XPLANおよびDBMS_WORKLOAD_REPOSITORYなどがあります。
PLの詳細については、PLリファレンスを参照してください。
ビュー(view)
OceanBaseデータベースは、information_schemaとmysqlという2つの内部データベースについて、その大部分のビューを実装しています。しかし、アーキテクチャの違いにより、MySQLのすべてのビューが実装されていることや、ビュー内のすべての列がMySQLと完全に同一の意味を持つことを保証するものではありません。
システムビューに関する詳細は、リファレンスのシステムビューの章を参照してください。
文字セット(character set)
OceanBase データベースがサポートする文字セットは以下のとおりです:
binary
utf8mb4/utf8mb3
説明
utf8mb3はutf8mb4のエイリアスです。gbk
utf16
utf16le
gb18030
latin1
gb18030_2022
ascii
tis620
sjis
big5
dec8
gb2312
ujis
euckr
eucjpms
cp932
cp850
hp8
macroman
swe7
説明
OceanBaseデータベースでは、V4.3.5 BP1から文字セットがサポートされています:gb2312、ujis、euckr、eucjpms、cp932、cp850、hp8、macroman および swe7。
言語ソートと照合順序(collations)
OceanBaseデータベースがサポートする照合順序は以下の表に示されています。
| 照合順序 | 所属文字セット | 説明 |
|---|---|---|
| utf8mb4_general_ci | utf8mb4 | 汎用的なソート規則を使用します。 |
| utf8mb4_bin | utf8mb4 | バイナリソート規則を使用します。 |
| utf8mb4_unicode_ci | utf8mb4 | Unicode照合アルゴリズム(UCA)に基づくソート規則を使用します。 |
| utf8mb4_unicode_520_ci | utf8mb4 | Unicode 5.2.0に基づくソート規則を使用します。Unicodeコードポイントの順序に基づき、大文字と小文字の区別はされません。 |
| utf8mb4_croatian_ci | utf8mb4 | クロアチア語 (Croatian) に基づくソート規則を使用します。utf8mb4_croatian_ciはutf8_croatian_ciと互換性があります。 |
| utf8mb4_czech_ci | utf8mb4 | チェコ語(Czech)に基づくソート規則を使用します。 |
| utf8mb4_0900_ai_ci | utf8mb4 | Unicode 9.0.0文字ソートルールに基づく照合順序を使用し、大文字と小文字の区別を無視し、大文字と小文字を同一文字として扱います。 |
| binary | binary | バイナリソート規則を使用します。 |
| gbk_chinese_ci | gbk | 中国語の言語ソート規則を使用します。 |
| gbk_bin | gbk | バイナリソート規則を使用します。 |
| utf16_general_ci | utf16 | 汎用的なソート規則を使用します。 |
| utf16_bin | utf16 | バイナリソート規則を使用します。 |
| utf16_unicode_ci | utf16 | Unicode照合アルゴリズム(UCA)に基づくソート規則を使用します。 |
| utf8mb4_german2_ci | utf16le | ドイツ語のソート規則を使用します。 |
| utf8mb4_croatian_ci | utf16le | クロアチア語に基づくソート規則を使用します。 |
| gb18030_chinese_ci | gb18030 | 中国語の言語ソート規則を使用します。 |
| gb18030_bin | gb18030 | バイナリソート規則を使用します。 |
| latin1_swedish_ci | latin1 | スウェーデン語/フィンランド語のソート規則を使用します。 |
| latin1_german1_ci | latin1 | ドイツ語(German)の言語環境におけるlatin1文字セットのソート規則を使用します。 |
| latin1_danish_ci | latin1 | デンマーク語(Danish)の言語環境におけるlatin1文字セットのソート規則を使用します。 |
| latin1_german2_ci | latin1 | ドイツ語環境で使用され、辞書順での文字比較が必要なアプリケーションシナリオに適しています。 |
| latin1_general_ci | latin1 | 一部のヨーロッパ言語のデータベース設計など、大文字と小文字を区別せず、アクセント記号のサポートが必要なシナリオで使用します。 |
| latin1_general_cs | latin1 | 大文字と小文字を区別する汎用的なソート規則で使用し、複数の言語(西ヨーロッパ言語など)をサポートします。 |
| latin1_spanish_ci | latin1 | スペイン語(Spanish)の言語環境のソート規則を使用します。 |
| latin1_bin | latin1 | latin1バイナリソート規則を使用します。 |
| gb18030_2022_bin | gb18030_2022 | バイナリソート規則を使用します。 |
| gb18030_2022_chinese_ci | gb18030_2022 | ピンインのソート規則を使用します。大文字と小文字を区別しません。MySQL モードにおける同文字セットのデフォルト照合順序。 |
| gb18030_2022_chinese_cs | gb18030_2022 | ピンインのソート規則を使用します。大文字と小文字を区別します。 |
| gb18030_2022_radical_ci | gb18030_2022 | 部首と筆順のソート規則を使用します。大文字と小文字を区別しません。 |
| gb18030_2022_radical_cs | gb18030_2022 | 部首と筆順のソート規則を使用します。大文字と小文字を区別します。 |
| gb18030_2022_stroke_ci | gb18030_2022 | 筆順のソート規則を使用します。大文字と小文字を区別しません。 |
| gb18030_2022_stroke_cs | gb18030_2022 | 筆順のソート規則を使用します。大文字と小文字を区別します。 |
| ascii_bin | ascii | バイナリソート規則を使用します。 |
| ascii_general_ci | ascii | アルファベットに基づく大文字と小文字を区別しないソート規則を使用します。大文字と小文字の区別を無視し、大文字と小文字を同一文字として扱っていました。 |
| tis620_bin | tis620 | バイナリソート規則を使用します。 |
| tis620_thai_ci | tis620 | タイ語のソート規則を使用し、大文字と小文字を区別しません。 |
| sjis_japanese_ci | sjis | 日本語のソート規則を使用します。 |
| dec8_swedish_ci | dec8 | スウェーデン語のソート規則を使用します。 |
| gb2312_chinese_ci | gb2312 | GB2312文字セットを使用し、中国語のソート規則で大文字と小文字を区別せずにソートします。
説明OceanBaseデータベースV4.3.5では、V4.3.5BP1以降、この照合順序をサポートします。 |
| gb2312_bin | gb2312 | GB2312文字セットを使用し、バイナリソート規則で大文字と小文字を区別してソートします。
説明OceanBaseデータベースV4.3.5では、V4.3.5BP1以降、この照合順序をサポートします。 |
| ujis_japanese_ci | ujis | UJIS文字セットを使用し、日本語のソート規則で大文字と小文字を区別せずにソートします。
説明OceanBaseデータベースV4.3.5では、V4.3.5BP1以降、この照合順序をサポートします。 |
| ujis_bin | ujis | UJIS文字セットを使用し、バイナリソート規則で大文字と小文字を区別してソートします。
説明OceanBaseデータベースV4.3.5では、V4.3.5BP1以降、この照合順序をサポートします。 |
| euckr_korean_ci | euckr | EUCKR文字セットを使用し、韓国語のソート規則で大文字と小文字を区別せずにソートします。
説明OceanBaseデータベースV4.3.5では、V4.3.5BP1以降、この照合順序をサポートします。 |
| euckr_bin | euckr | EUCKR文字セットを使用し、バイナリソート規則で大文字と小文字を区別してソートします。
説明OceanBaseデータベースV4.3.5では、V4.3.5BP1以降、この照合順序をサポートします。 |
| eucjpms_japanese_ci | eucjpms | EUCJPMS文字セットを使用し、日本語のソート規則で大文字と小文字を区別せずにソートします。
説明OceanBaseデータベースV4.3.5では、V4.3.5BP1以降、この照合順序をサポートします。 |
| eucjpms_bin | eucjpms | EUCJPMS文字セットを使用し、バイナリソート規則で大文字と小文字を区別してソートします。
説明OceanBaseデータベースV4.3.5では、V4.3.5BP1以降、この照合順序をサポートします。 |
| cp932_japanese_ci | cp932 | CP932文字セットを使用し、日本語のソート規則で、大文字と小文字を区別せずにソートします。
説明OceanBaseデータベースV4.3.5では、V4.3.5BP1以降、この照合順序をサポートします。 |
| cp932_bin | cp932 | CP932文字セットを使用し、バイナリソート規則で大文字と小文字を区別してソートします。
説明OceanBaseデータベースV4.3.5では、V4.3.5BP1以降、この照合順序をサポートします。 |
| cp850_general_ci | cp850 | CP850文字セットを使用し、汎用的なソート規則で大文字と小文字を区別せずにソートします。
説明OceanBaseデータベースV4.3.5では、V4.3.5BP1以降、この照合順序をサポートします。 |
| cp850_bin | cp850 | CP850文字セットを使用し、バイナリソート規則で大文字と小文字を区別してソートします。
説明OceanBaseデータベースV4.3.5では、V4.3.5BP1以降、この照合順序をサポートします。 |
| hp8_english_ci | hp8 | HP8文字セットを使用し、英語のソート規則で大文字と小文字を区別せずにソートします。
説明OceanBaseデータベースV4.3.5では、V4.3.5BP1以降、この照合順序をサポートします。 |
| hp8_bin | hp8 | HP8文字セットを使用し、バイナリソート規則で大文字と小文字を区別してソートします。
説明OceanBaseデータベースV4.3.5では、V4.3.5BP1以降、この照合順序をサポートします。 |
| macroman_general_ci | macroman | MacRoman文字セットを使用し、汎用的なソート規則で大文字と小文字を区別せずにソートします。
説明OceanBaseデータベースV4.3.5では、V4.3.5BP1以降、この照合順序をサポートします。 |
| macroman_bin | macroman | MacRoman文字セットを使用し、バイナリソート規則で大文字と小文字を区別してソートします。
説明OceanBaseデータベースV4.3.5では、V4.3.5BP1以降、この照合順序をサポートします。 |
| swe7_swedish_ci | swe7 | SWE7文字セットを使用し、スウェーデン語のソート規則で大文字と小文字を区別せずにソートします。
説明OceanBaseデータベースV4.3.5では、V4.3.5BP1以降、この照合順序をサポートします。 |
| swe7_bin | swe7 | SWE7文字セットを使用し、バイナリソート規則で大文字と小文字を区別してソートします。
説明OceanBaseデータベースV4.3.5では、V4.3.5BP1以降、この照合順序をサポートします。 |
関数
OceanBaseがサポートする分析(ウィンドウ)関数は、MySQLのスーパーセットです。つまり、MySQLの全ての分析関数がOceanBaseでも利用できます。
MySQLと比べて、OceanBaseのMySQLモードは以下の関数をサポートしていません。
文字列関数:
LOAD_FILE()とMATCH()。XML関数:
ExtractValue()とUpdateXML()。その他の関数:
MASTER_POS_WAIT()。
パーティションニング
OceanBaseデータベースとMySQLデータベースのパーティション機能は、以下のような違いがあります。
パーティション構成: OceanBaseは、通常のパーティションに加え、テンプレートを使用したサブパーティションと、使用しないサブパーティションの両方をサポートします。一方、MySQLはテンプレートを使用しないサブパーティションには対応していません。
サブパーティションの種類: OceanBaseのサブパーティションがHash、Key、Range、Range Columns、List、List Columnsなど多様な方式をサポートするのに対し、MySQLがサポートするのはHashとKeyのみです。
サブパーティションの管理: OceanBaseではサブパーティションの追加・削除が可能ですが、MySQLではこの操作はサポートされていません。
注意
- サブパーティションの種類がHashまたはKeyの場合、その追加や削除はサポートされていません。
- OceanBaseデータベースV4.3.5バージョンでは、V4.3.5 BP1から、サブパーティションの追加がサポートされています。
パーティションの詳細な説明および使用方法は、パーティションの概要を参照してください。
バックアップ・リカバリ
OceanBaseデータベースのバックアップとリカバリ機能は、MySQLと部分的に互換性があります。
フルバックアップと増分バックアップ
ホットバックアップ
テーブル単位およびデータベース単位でのリカバリ
指定されたパスへのリカバリ
ログのアーカイブとバックアップデータの検証
クラスタ・レベルのバックアップとリカバリ
コールドバックアップ
テナント内の一部のデータベースやテーブル単位でのバックアップ
ストレージエンジン
MySQLがInnoDBやMyISAMといったブロックベースのストレージエンジンを使用するのに対し、OceanBaseはLSM-Treeアーキテクチャをベースとした独自のストレージエンジンを使用しています。
オプティマイザー
OceanBaseデータベースは、MySQLのオプティマイザー機能の一部と互換性があります。オプティマイザーの詳細については、SQL チューニングガイドを参照してください。
実行計画を確認するコマンド
- 出力される列は
ID、OPERATOR、NAME、EST. ROWS、COSTおよび演算子の詳細情報のみです。
- 出力される列は
統計情報の確認
ANALYZE TABLE文による手動でのヒストグラム統計情報の収集。ビューからのテーブルおよび列統計情報の確認。
クエリ・リライト(以下の最適化をサポート)
外部結合の最適化
外部結合の簡略化
ブロックネストループ結合、バッチキーアクセス結合
条件フィルタリング
定数畳み込の最適化をサポートします。
IS NULLの最適化 (※OceanBaseのインデックスはNULL値を格納しません)ORDER BYの最適化GROUP BYの最適化DISTINCTの削除LIMITのプッシュダウンウィンドウ関数の最適化
フルテーブルスキャンの回避
述語プッシュダウン
Optimizer Hints
Optimizer Hintsの結合順序
テーブル単位のOptimizer Hints
インデックス単位のOptimizer Hints
INDEX、FULL、ORDERED、LEADINGなどのヒント構文
MySQLのパラレル実行機能には、パラレルクエリ(パラレルクエリ)、並列レプリケーション、並列書き込みなどが含まれ、OceanBaseデータベースはすでに並列演算子をサポートしています。これには、並列集計、並列結合、並列グループ化、並列ソートなどが含まれます。
実行計画のキャッシュとプリコンパイルをサポートしています(MySQLにはない機能です)。
実行計画を確認するコマンド
SHOW WARNINGSを使った追加情報の表示はサポートされていません。