2つのテーブルの間でジョイン条件を処理していますが、一致するカラムの1つが値の連結になっています。 tableAのcolumnAをtableBのcolumnBの最初の2文字に結合する必要があります。サブストリングとワイルドカードのようなSQL比較のパフォーマンス
私はこれを処理するために2つの異なるステートメントを開発しましたが、各メソッドのパフォーマンスを分析しようとしました。
方法1:
ON tB.columnB like tA.columnA || '%'
方法2:
はON substr(tB.columnB,1,2) = tA.columnA
クエリ実行プランは、方法2に比べ方法1使用してはるかに少ないステップを持っている、しかし、それは方法2のように見えるが多くを実行しますもっと早く。また、実行計画は、パフォーマンスを向上させる方法2の推奨インデックスを示しています。
私はこれをIBM iSeries上で実行していますが、SQLクエリの最適化の詳細については一般的な意味での解答に関心があります。
方法2がより高速に実行されることは意味がありますか?
これはよく似ていますが、これらのアプローチのパフォーマンスの違いについて具体的な回答を誰も提供してくれなかったようです。T-SQL speed comparison between LEFT() vs. LIKE operator
PS:このタイプの結合が必要な表の設計は、私が現時点で変更できるものではありません。私は、異なるタイプのデータを保持するフィールドを分けておくことが好ましいことを理解しています。
INNERまたはOUTER JOIN? –
これは内部結合のためのものです。タイプに参加すると違いが出ますか? – Swoop
クエリオプティマイザで何が起こっているのかを推測するのはおそらく失われたゲームです。しかし、はい、この場合、それがINNER JOINの場合、方法1ではすべてのtAを読み取る必要があり、一方、方法2ではtBを読み取る必要があります。行数に応じて、それは重要であり、実行計画に影響する可能性があります。 –