こちらの記事の続きです。
以下の 2 ページ分をまとめて紹介します。
- 2.16.4 Index and Optimizer Hints(MySQL HeatWave User Guide)
- 2.16.5 Join Limitations(MySQL HeatWave User Guide)
これらについても関数・オペレータと同様、HeatWave で使えない関数・オペレータが含まれる SQL 文は自動的に MySQL DB 側で実行される だけの話であり、こちらのようにデータ不整合が生じるおそれもないので、MySQL HeatWave User Guide に記載された内容を翻訳してそのまま列挙します。
2023/9/6 時点(MySQL バージョン 8.1.0-u1-cloud)の情報です。
今後、制限が変わる可能性があります。
インデックスヒント・オプティマイザヒントの制限
データフォーマットが違うのである意味当然ですが、HeatWave では全般的に使用不可です。
- インデックスヒント・オプティマイザヒント
-
FIRSTMATCH
以外の準結合(セミジョイン)戦略(DUPSWEEDOUT
)- 準結合(セミジョイン)戦略についてはこちらを参照
結合(JOIN)の制限(MySQL DB で実行され HeatWave にオフロードされないもの)
準結合(セミジョイン)・アンチジョインに関する項目が多いです。
オプティマイザによる変換・最適化によって別のクエリーと同様の実行計画に書き換えられた結果、HeatWave にオフロードされる場合とされない場合がある 点に注意が必要です。
- 後述する
IN
・EXISTS
によるものを除くアンチジョイン -
YEAR
型の他の型への暗黙のキャストによるクエリーキャスト注入- 1.3 MySQL 8.0 の新機能(MySQL 8.0 リファレンスマニュアル)「クエリーキャスト注入」を参照
-
VARCHAR
型のDATETIME
・TIMESTAMP
・DATE
以外の型への暗黙のキャストによるクエリーキャスト注入 - 日付(時刻・日時)型から数値型への暗黙のキャストによるクエリーキャスト注入
- 日付(時刻・日時)型を数値型と結合することは不可
-
EXISTS
準結合(セミジョイン)・アンチジョイン- 以下を除く
SELECT ... WHERE ... EXISTS (...)
SELECT ... WHERE ... EXISTS (...) IS TRUE
SELECT ... WHERE ... EXISTS (...) IS NOT FALSE
SELECT ... WHERE ... NOT EXISTS (...) IS FALSE
SELECT ... WHERE ... NOT EXISTS (...) IS NOT TRUE
- オプティマイザによる変換・最適化により、
EXISTS
準結合(セミジョイン)・アンチジョインのこれら以外のバリエーションが HeatWave にオフロードされる場合とされない場合がある
- 以下を除く
-
IN
準結合(セミジョイン)・アンチジョイン- 以下を除く
SELECT ... WHERE ... IN (...)
SELECT ... WHERE ... IN (...) IS TRUE
SELECT ... WHERE ... NOT IN (...) IS FALSE
-
EXISTS
同様、オプティマイザによる変換・最適化により、IN
準結合(セミジョイン)・アンチジョインのこれら以外のバリエーションが HeatWave にオフロードされる場合とされない場合がある
- 以下を除く
- 準結合(セミジョイン)およびアンチジョインは、最初の 10,000 個の実行可能な計画を評価した後、または最後の有効な計画から 10,000 個の実行可能な計画を調査した後に見つかった最良の計画を使用する
- 実行計画の評価に時間が掛かりすぎるのを防止するための制限
- 2 つのテーブルに等号条件が定義されていない外部結合(
OUTER JOIN
) -
IN ... EXISTS
サブクエリをON
句に持つ一部の外部結合(OUTER JOIN
)
関数・オペレータ以上に静的に解析して対処するのは難しそうな印象です。こちらも実際に SQL 文を流して判断するのが良さそうですね。
2023/9/9 追記:
続きの記事を書きました。