LoginSignup
1
0

MySQL HeatWave で動作の制限・制約がある SQL 文 (4) インデックスヒント・オプティマイザヒント・結合(JOIN)

Last updated at Posted at 2023-09-06

こちらの記事の続きです。

以下の 2 ページ分をまとめて紹介します。

これらについても関数・オペレータと同様、HeatWave で使えない関数・オペレータが含まれる SQL 文は自動的に MySQL DB 側で実行される だけの話であり、こちらのようにデータ不整合が生じるおそれもないので、MySQL HeatWave User Guide に記載された内容を翻訳してそのまま列挙します。

2023/9/6 時点(MySQL バージョン 8.1.0-u1-cloud)の情報です。
今後、制限が変わる可能性があります。

インデックスヒント・オプティマイザヒントの制限

データフォーマットが違うのである意味当然ですが、HeatWave では全般的に使用不可です。

結合(JOIN)の制限(MySQL DB で実行され HeatWave にオフロードされないもの)

準結合(セミジョイン)・アンチジョインに関する項目が多いです。

オプティマイザによる変換・最適化によって別のクエリーと同様の実行計画に書き換えられた結果、HeatWave にオフロードされる場合とされない場合がある 点に注意が必要です。

  • 後述するINEXISTSによるものを除くアンチジョイン
  • YEAR型の他の型への暗黙のキャストによるクエリーキャスト注入
  • VARCHAR型のDATETIMETIMESTAMPDATE以外の型への暗黙のキャストによるクエリーキャスト注入
  • 日付(時刻・日時)型から数値型への暗黙のキャストによるクエリーキャスト注入
    • 日付(時刻・日時)型を数値型と結合することは不可
  • 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 追記:
続きの記事を書きました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0