2024年2月の学習内容
- 2024.03.01
- その他
- 341 View
2月中の業務で学習した内容です。
- クエリのJOINでクロスジョインが発生
- クエリのJOINでLEFTJOIN高速化について
①クエリのJOINでクロスジョインが発生
クエリは以前より使用した事があり、LEFT OUTER JOINを使用し、紐づけていました。
今回のケースではLEFTJOINをしても、クロスジョインという現象がされてしまうという事を初めて知りました。(クロスジョイン自体が初です。)
これは、例えば、AとBというテーブルがあった際に、
・A
1 | りんご | |
2 | バナナ | 200円 |
3 | ぶどう |
・B
1 | りんご | 青森 |
2 | バナナ | |
3 | ぶどう |
・JOIN後テーブル
1 | りんご | |
1 | りんご | 青森 |
2 | バナナ | 200円 |
2 | バナナ | |
3 | ぶどう |
このようなデータになってしまいます。
これを防ぐために別のJOIN方法やUNIONテーブルの使用などを検討しましたが、GraphQLではその機能が無く断念しました。
PHPでクエリを作成しそれを実行させるという方法を取り、その中でCTEというクエリ実行で先に一時テーブルを作成する方法を用いて、クロスジョインを防ぐ事が出来ました。
②クエリのJOINでLEFTJOIN高速化について
リピーターフィールド以外の項目もLEFTJOINで何となく接続していましたが、LEFTJOINを多用に使用するとパフォーマンス低下が凄まじいという事が分かりました。
項目数が20を超えており、各項目をLEFTJOINしていました。
これをリピーターフィールドでない項目はサブクエリ化し、LEFTJOIN1回にまとめる事で速度上昇させる事が出来ました。
今まで、欲しい項目ごとにJOINさせていたおり、パフォーマンスへの意識が足りていなかったなと感じました。
「東三河・西三河で働く!」高時給な派遣求人が満載!
-
前の記事
【PHP】デバックログをconsole.logを使用して表示しよう 2024.02.28
-
次の記事
【jQuery】動的に追加した要素でイベントが発生しない!!そんな時は・・・ 2024.04.01